class Watcher{
    constructor (vm, value, callback) {
        // vm 里面存放着最新值
        // value 数据变化的属性
        // 绑定的回调函数
        this.vm = vm
        this.value = value
        this.callback = callback
        // 存放旧值
        this.oldValue = this.getOldValue()
    }
    // 获取值 这里会间接触发 getter
    getOldValue () {
        Dep.target = this
        const olaValue = compileUtils.getValue(this.value, this.vm)
        Dep.target = null
        return olaValue
    }
    update () {
        // 更新操作 数据变化后 Dep会通过notify方法通知订阅者 然后订阅者更新视图
        const newValue = compileUtils.getValue(this.value, this.vm)
        if (newValue !== this.oldValue) {
            this.callback(newValue)
            this.oldValue = newValue
        }
    }
}
